----------> Furb3T <----------
presenta:
Facciamo un p� di ReveRsinG !!!
Salve miei fedeli lettori, la lezione di oggi riguarda il ReversinG; non sapete ancora cosa vuol dire? C'� una sola cosa da fare: CONTINUATE A LEGGERE.
Il programma che utilizzer� oggi � Applet Botton Factory 4.0, un grazioso prg che serve per costruire applet java per creare bottoni. Il tool di turno per analizzare il prg indovinate qual �? Softice come al solito. Partiamo, lanciate il programma e comparir� subito una NAG nella quale ci sono 2 bottoni: OK e REGISTER. Premete REGISTER e vi apparir� un form per la registrazione del prg. Notiamo subito che bisogna inserire 2 campi, fatelo e poi prima di premere il tasto Register entrate in Softice con Ctrl-D, fissate un BPX HMEMCPY e poi ritornate con F5. Ora premete il tasto Register e....Voil� eccovi dentro Softice, premete F12 circa 7/8 volte almeno fino a quando non sarete all'interno del prg e poi andate avanti con F10 fino ad arrivare a questo punto:
:0046F0F8
mov eax, dword ptr [ebp-04] ----> scrivete d eax
comparir� il nome inserito
:0046F0FB call 00403F68
----> controlla che il campo non sia vuoto
:0046F100 mov edx, 0046F1F0 ----->
fate d 0046F1F0 compare un stringa, ma cosa �?
:0046F105 call 00408DA4
-----> per capire l'istruzione precedente, analizziamo questa call
:0046F10A test eax, eax
:0046F10C jne 0046F1C2
Ok, quando siamo sulla Call che ci interessa, facciamo un bel TRaceIN con F8, avremo:
.....................
---------> a noi interessa da questo punto in poi
:00408DB9 repz
:00408DBA cmpsb
:00408DBB je 00408DE1
:00408DBD mov al, byte ptr [esi-01] ----> in al verranno messe una ad una le lettere del nostro nome
:00408DC0 cmp al, 61
-----> viene comparato al con 61
che corrisponde alla lettera a
:00408DC3 jb 00408DCD
:00408DC5 cmp al, 7A
-----> 7A corrisponde alla lettera z
:00408DC8 ja 00408DCD
:00408DCA sub al, 20
:00408DCD mov dl, byte ptr [edi-01] ----> muovo in dl le lettere di edi-01, ma edi-01 � la stringa
che
:00408DD0 cmp dl, 61
veniva caricata in EDX prima della call,
:00408DD3 jb 00408DDD
:00408DD5 cmp dl, 7A
:00408DD8 ja 00408DDD
:00408DDA sub dl, 20
:00408DDD sub eax, edx
-----> in EAX abbiamo il cod Hex delle lettere che compongono il
nome
:00408DDF je 00408DB9
inserito da noi, in EDX il cod Hex delle
lettere che compongono la
stringa
che abbiamo trovato, e dato che il JE dell'istruzione successiva fa ripetere il loop vuol
dire che quella stringa � il vero codice.
Bene, ora che abbiamo il primo codice dobbiamo trovare il secondo, ed � facilissimo!!!! disabilitate il BPX con BD *, e premiamo F5, inseriamo nel primo campo il codice vero, ritornate su Softice, riabilitate il BPX con BE *, ritornate nel prg con F5 e premete Register, eccovi di nuovo in Softice. Vai con F12 e poi con F10 fino ad arrivare qui:
:0046F120 mov eax,
dword ptr [ebp-04]
----> d EAX ed ecco il secondo codice che avete scritto
:0046F123 call 00403F68
-----> verifica che il campo non sia vuoto
:0046F128 mov edx, 0046F1F8
-----> viene messo in EDX una strana stringa
:0046F12D call 00408DA4
------> ma questa � la call di prima che fa il controllo, quindi ci� vuol
:0046F132 test eax, eax
dire che la stringa in edx � il secondo vero codice
:0046F134 jne 0046F1C2
Disabilitate il BPX con BD * premete F5, inserite il secondo codice vero, premete Register e .....WOW il vs prg ora � perfettamente registrato senza aver modificato nessuna istruzione. Ebbene il ReversinG � proprio questo, individuare quello che vuole il prg e darglielo senza modificare nulla, in questo modo siete sicuri che tutto funzioner� bene visto che quelli sono i codici che erano stati previsti dai programmatori.
Bene la lezione e terminata, e ci vediamo alla prossima puntata.
Ringraziamenti: A tutti gli amici di RingZer0 e ad Ins perch� continua a pubblicare i miei tutorials.